{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 14.4 USDA Food Database（美国农业部食品数据库）\n",
    "\n",
    "这个数据是关于食物营养成分的。存储格式是JSON，看起来像这样：\n",
    "```\n",
    "{\n",
    "    \"id\": 21441, \n",
    "    \"description\": \"KENTUCKY FRIED CHICKEN, Fried Chicken, EXTRA CRISPY, Wing, meat and skin with breading\", \n",
    "    \"tags\": [\"KFC\"], \n",
    "    \"manufacturer\": \"Kentucky Fried Chicken\", \n",
    "    \"group\": \"Fast Foods\", \n",
    "    \"portions\": [ \n",
    "        { \"amount\": 1, \n",
    "          \"unit\": \"wing, with skin\", \n",
    "          \"grams\": 68.0\n",
    "        }\n",
    "        ...\n",
    "      ],\n",
    "    \"nutrients\": [ \n",
    "      { \"value\": 20.8, \n",
    "        \"units\": \"g\", \n",
    "        \"description\": \"Protein\", \n",
    "        \"group\": \"Composition\" \n",
    "      },\n",
    "      ...\n",
    "     ]\n",
    "}     \n",
    "```\n",
    "\n",
    "每种食物都有一系列特征，其中有两个list，protions和nutrients。我们必须把这样的数据进行处理，方便之后的分析。\n",
    "\n",
    "这里使用python内建的json模块："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "pd.options.display.max_rows = 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6636"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db = json.load(open('../datasets/usda_food/database.json'))\n",
    "len(db)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['manufacturer', 'description', 'group', 'id', 'tags', 'nutrients', 'portions'])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db[0].keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'description': 'Protein',\n",
       " 'group': 'Composition',\n",
       " 'units': 'g',\n",
       " 'value': 25.18}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "db[0]['nutrients'][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>description</th>\n",
       "      <th>group</th>\n",
       "      <th>units</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Protein</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>25.180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Total lipid (fat)</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>29.200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Carbohydrate, by difference</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>3.060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Ash</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>3.280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Energy</td>\n",
       "      <td>Energy</td>\n",
       "      <td>kcal</td>\n",
       "      <td>376.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>157</th>\n",
       "      <td>Serine</td>\n",
       "      <td>Amino Acids</td>\n",
       "      <td>g</td>\n",
       "      <td>1.472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>158</th>\n",
       "      <td>Cholesterol</td>\n",
       "      <td>Other</td>\n",
       "      <td>mg</td>\n",
       "      <td>93.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>Fatty acids, total saturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>18.584</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>Fatty acids, total monounsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>8.275</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>Fatty acids, total polyunsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.830</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>162 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                            description        group units    value\n",
       "0                               Protein  Composition     g   25.180\n",
       "1                     Total lipid (fat)  Composition     g   29.200\n",
       "2           Carbohydrate, by difference  Composition     g    3.060\n",
       "3                                   Ash        Other     g    3.280\n",
       "4                                Energy       Energy  kcal  376.000\n",
       "..                                  ...          ...   ...      ...\n",
       "157                              Serine  Amino Acids     g    1.472\n",
       "158                         Cholesterol        Other    mg   93.000\n",
       "159        Fatty acids, total saturated        Other     g   18.584\n",
       "160  Fatty acids, total monounsaturated        Other     g    8.275\n",
       "161  Fatty acids, total polyunsaturated        Other     g    0.830\n",
       "\n",
       "[162 rows x 4 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients = pd.DataFrame(db[0]['nutrients'])\n",
    "nutrients"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当把由字典组成的list转换为DataFrame的时候，我们可以吹创业提取的list部分。这里我们提取食品名，群（group），ID，制造商："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>description</th>\n",
       "      <th>group</th>\n",
       "      <th>id</th>\n",
       "      <th>manufacturer</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Cheese, caraway</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1008</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Cheese, cheddar</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1009</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Cheese, edam</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1018</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Cheese, feta</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1019</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Cheese, mozzarella, part skim milk</td>\n",
       "      <td>Dairy and Egg Products</td>\n",
       "      <td>1028</td>\n",
       "      <td></td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                          description                   group    id  \\\n",
       "0                     Cheese, caraway  Dairy and Egg Products  1008   \n",
       "1                     Cheese, cheddar  Dairy and Egg Products  1009   \n",
       "2                        Cheese, edam  Dairy and Egg Products  1018   \n",
       "3                        Cheese, feta  Dairy and Egg Products  1019   \n",
       "4  Cheese, mozzarella, part skim milk  Dairy and Egg Products  1028   \n",
       "\n",
       "  manufacturer  \n",
       "0               \n",
       "1               \n",
       "2               \n",
       "3               \n",
       "4               "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "info_keys = ['description', 'group', 'id', 'manufacturer']\n",
    "info = pd.DataFrame(db, columns=info_keys)\n",
    "info[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 6636 entries, 0 to 6635\n",
      "Data columns (total 4 columns):\n",
      "description     6636 non-null object\n",
      "group           6636 non-null object\n",
      "id              6636 non-null int64\n",
      "manufacturer    5195 non-null object\n",
      "dtypes: int64(1), object(3)\n",
      "memory usage: 207.5+ KB\n"
     ]
    }
   ],
   "source": [
    "info.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以看到食物群的分布，使用value_counts:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Vegetables and Vegetable Products    812\n",
       "Beef Products                        618\n",
       "Baked Products                       496\n",
       "Breakfast Cereals                    403\n",
       "Legumes and Legume Products          365\n",
       "Fast Foods                           365\n",
       "Lamb, Veal, and Game Products        345\n",
       "Sweets                               341\n",
       "Pork Products                        328\n",
       "Fruits and Fruit Juices              328\n",
       "Name: group, dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.value_counts(info.group)[:10]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里我们对所有的nutrient数据做一些分析，把每种食物的nutrient部分组合成一个大表格。首先，把每个食物的nutrient列表变为DataFrame，添加一列为id，然后把id添加到DataFrame中，接着使用concat联结到一起："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 先创建一个空DataFrame用来保存最后的结果\n",
    "# 这部分代码运行时间较长，请耐心等待\n",
    "nutrients_all = pd.DataFrame()\n",
    "\n",
    "for food in db:\n",
    "    nutrients = pd.DataFrame(food['nutrients'])\n",
    "    nutrients['id'] = food['id']\n",
    "    nutrients_all = nutrients_all.append(nutrients, ignore_index=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> 译者：虽然作者在书中说了用concat联结在一起，但我实际测试后，这个concat的方法非常耗时，用时几乎是append方法的两倍，所以上面的代码中使用了append方法。\n",
    "\n",
    "一切正常的话出来的效果是这样的："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>description</th>\n",
       "      <th>group</th>\n",
       "      <th>units</th>\n",
       "      <th>value</th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Protein</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>25.180</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Total lipid (fat)</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>29.200</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Carbohydrate, by difference</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>3.060</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Ash</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>3.280</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Energy</td>\n",
       "      <td>Energy</td>\n",
       "      <td>kcal</td>\n",
       "      <td>376.000</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389350</th>\n",
       "      <td>Vitamin B-12, added</td>\n",
       "      <td>Vitamins</td>\n",
       "      <td>mcg</td>\n",
       "      <td>0.000</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389351</th>\n",
       "      <td>Cholesterol</td>\n",
       "      <td>Other</td>\n",
       "      <td>mg</td>\n",
       "      <td>0.000</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389352</th>\n",
       "      <td>Fatty acids, total saturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.072</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389353</th>\n",
       "      <td>Fatty acids, total monounsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.028</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389354</th>\n",
       "      <td>Fatty acids, total polyunsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.041</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>389355 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                               description        group units    value     id\n",
       "0                                  Protein  Composition     g   25.180   1008\n",
       "1                        Total lipid (fat)  Composition     g   29.200   1008\n",
       "2              Carbohydrate, by difference  Composition     g    3.060   1008\n",
       "3                                      Ash        Other     g    3.280   1008\n",
       "4                                   Energy       Energy  kcal  376.000   1008\n",
       "...                                    ...          ...   ...      ...    ...\n",
       "389350                 Vitamin B-12, added     Vitamins   mcg    0.000  43546\n",
       "389351                         Cholesterol        Other    mg    0.000  43546\n",
       "389352        Fatty acids, total saturated        Other     g    0.072  43546\n",
       "389353  Fatty acids, total monounsaturated        Other     g    0.028  43546\n",
       "389354  Fatty acids, total polyunsaturated        Other     g    0.041  43546\n",
       "\n",
       "[389355 rows x 5 columns]"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients_all"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个DataFrame中有一些重复的部分，看一下有多少重复的行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14179"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients_all.duplicated().sum() # number of duplicates"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "把重复的部分去掉："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>description</th>\n",
       "      <th>group</th>\n",
       "      <th>units</th>\n",
       "      <th>value</th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Protein</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>25.180</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Total lipid (fat)</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>29.200</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Carbohydrate, by difference</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>3.060</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Ash</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>3.280</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Energy</td>\n",
       "      <td>Energy</td>\n",
       "      <td>kcal</td>\n",
       "      <td>376.000</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389350</th>\n",
       "      <td>Vitamin B-12, added</td>\n",
       "      <td>Vitamins</td>\n",
       "      <td>mcg</td>\n",
       "      <td>0.000</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389351</th>\n",
       "      <td>Cholesterol</td>\n",
       "      <td>Other</td>\n",
       "      <td>mg</td>\n",
       "      <td>0.000</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389352</th>\n",
       "      <td>Fatty acids, total saturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.072</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389353</th>\n",
       "      <td>Fatty acids, total monounsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.028</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389354</th>\n",
       "      <td>Fatty acids, total polyunsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.041</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>375176 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                               description        group units    value     id\n",
       "0                                  Protein  Composition     g   25.180   1008\n",
       "1                        Total lipid (fat)  Composition     g   29.200   1008\n",
       "2              Carbohydrate, by difference  Composition     g    3.060   1008\n",
       "3                                      Ash        Other     g    3.280   1008\n",
       "4                                   Energy       Energy  kcal  376.000   1008\n",
       "...                                    ...          ...   ...      ...    ...\n",
       "389350                 Vitamin B-12, added     Vitamins   mcg    0.000  43546\n",
       "389351                         Cholesterol        Other    mg    0.000  43546\n",
       "389352        Fatty acids, total saturated        Other     g    0.072  43546\n",
       "389353  Fatty acids, total monounsaturated        Other     g    0.028  43546\n",
       "389354  Fatty acids, total polyunsaturated        Other     g    0.041  43546\n",
       "\n",
       "[375176 rows x 5 columns]"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients_all = nutrients_all.drop_duplicates()\n",
    "nutrients_all"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "为了与info_keys中的group和descripton区别开，我们把列名更改一下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "col_mapping = {'description': 'food',\n",
    "               'group': 'fgroup'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 6636 entries, 0 to 6635\n",
      "Data columns (total 4 columns):\n",
      "food            6636 non-null object\n",
      "fgroup          6636 non-null object\n",
      "id              6636 non-null int64\n",
      "manufacturer    5195 non-null object\n",
      "dtypes: int64(1), object(3)\n",
      "memory usage: 207.5+ KB\n"
     ]
    }
   ],
   "source": [
    "info = info.rename(columns=col_mapping, copy=False)\n",
    "info.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "col_mapping = {'description' : 'nutrient',\n",
    "               'group': 'nutgroup'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>nutrient</th>\n",
       "      <th>nutgroup</th>\n",
       "      <th>units</th>\n",
       "      <th>value</th>\n",
       "      <th>id</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Protein</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>25.180</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Total lipid (fat)</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>29.200</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Carbohydrate, by difference</td>\n",
       "      <td>Composition</td>\n",
       "      <td>g</td>\n",
       "      <td>3.060</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Ash</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>3.280</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Energy</td>\n",
       "      <td>Energy</td>\n",
       "      <td>kcal</td>\n",
       "      <td>376.000</td>\n",
       "      <td>1008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389350</th>\n",
       "      <td>Vitamin B-12, added</td>\n",
       "      <td>Vitamins</td>\n",
       "      <td>mcg</td>\n",
       "      <td>0.000</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389351</th>\n",
       "      <td>Cholesterol</td>\n",
       "      <td>Other</td>\n",
       "      <td>mg</td>\n",
       "      <td>0.000</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389352</th>\n",
       "      <td>Fatty acids, total saturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.072</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389353</th>\n",
       "      <td>Fatty acids, total monounsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.028</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>389354</th>\n",
       "      <td>Fatty acids, total polyunsaturated</td>\n",
       "      <td>Other</td>\n",
       "      <td>g</td>\n",
       "      <td>0.041</td>\n",
       "      <td>43546</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>375176 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                  nutrient     nutgroup units    value     id\n",
       "0                                  Protein  Composition     g   25.180   1008\n",
       "1                        Total lipid (fat)  Composition     g   29.200   1008\n",
       "2              Carbohydrate, by difference  Composition     g    3.060   1008\n",
       "3                                      Ash        Other     g    3.280   1008\n",
       "4                                   Energy       Energy  kcal  376.000   1008\n",
       "...                                    ...          ...   ...      ...    ...\n",
       "389350                 Vitamin B-12, added     Vitamins   mcg    0.000  43546\n",
       "389351                         Cholesterol        Other    mg    0.000  43546\n",
       "389352        Fatty acids, total saturated        Other     g    0.072  43546\n",
       "389353  Fatty acids, total monounsaturated        Other     g    0.028  43546\n",
       "389354  Fatty acids, total polyunsaturated        Other     g    0.041  43546\n",
       "\n",
       "[375176 rows x 5 columns]"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nutrients_all = nutrients_all.rename(columns=col_mapping, copy=False)\n",
    "nutrients_all"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上面所有步骤结束后，我们可以把info和nutrients_all合并（merge）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 375176 entries, 0 to 375175\n",
      "Data columns (total 8 columns):\n",
      "nutrient        375176 non-null object\n",
      "nutgroup        375176 non-null object\n",
      "units           375176 non-null object\n",
      "value           375176 non-null float64\n",
      "id              375176 non-null int64\n",
      "food            375176 non-null object\n",
      "fgroup          375176 non-null object\n",
      "manufacturer    293054 non-null object\n",
      "dtypes: float64(1), int64(1), object(6)\n",
      "memory usage: 25.8+ MB\n"
     ]
    }
   ],
   "source": [
    "ndata = pd.merge(nutrients_all, info, on='id', how='outer')\n",
    "ndata.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "nutrient                                       Glycine\n",
       "nutgroup                                   Amino Acids\n",
       "units                                                g\n",
       "value                                             0.04\n",
       "id                                                6158\n",
       "food            Soup, tomato bisque, canned, condensed\n",
       "fgroup                      Soups, Sauces, and Gravies\n",
       "manufacturer                                          \n",
       "Name: 30000, dtype: object"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ndata.iloc[30000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以对食物群（food group）和营养类型（nutrient type）分组后，对中位数进行绘图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "result = ndata.groupby(['nutrient', 'fgroup'])['value'].quantile(0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x109c80d68>"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nA5J+T9XxbS/9s8BIqv//KcDkUt4Y4EO232hvapak0cBogAGrrdXJqYiIiIjoW9I56B8GSZpGNWLw\nMBw6bNMAACAASURBVHBHSd+rfKaW74OpOgv3AN+XdBZwk+172in30HIxvDwwlOrCv7POwQ222y7e\nVwDOlTQSWAh8uCbfg7b/DFBiHwbc20RbD7fd2vZF0heAa22/Vr5fA+xE1SFolL5cSZ9X0m+oKXsG\nVefjOuC6RpXbHguMBVhp6HA3EW9EREREn5FpRf3DfNsjgQ9SXRS3rTkQ8N2aOfob2r7Q9mPAVsBM\n4NuSTqsvUNKHgJOAPWyPAG4GBpbdC3jnf2dg3aGv1WyfAPwPsCXViMGKNfveqNleSO/oqO4L/BfV\nuZm0GOsmIiIiIvqkdA76kXI3/DjgX8qF7W3AUZIGA0haV9L7Ja0DzLP9C+BsqothgFeAVcv2alQX\n+nMlrQ3sU1PVHGDrsv2ZDkIaAjxr+y3gi8CAJppRG0Mz7gEOlLSypFWAg0pae+l3l/RBklYFPgUg\naTlgPdt3AV8vsQ9ehDgiIiIi+rzcGe1nbE+VNAP4nO2fS9oEmCgJ4FXgC8CGwNmS3gLeBL5SDh8L\n3CrpGdu7SZoKPAL8iWpdQJszgAslfQsY30E45wG/lvSPwK28e1ShPe+KoYn2TpE0DniwJP3M9lSA\nDtKvBKYDfwUmlf0DgF9IGkI14nKO7Zc6qnuLdYfQmuf1R0RERD8iO9OmI7qipaXFra2tnWeMiIiI\n6GGSJttu6SxfphVFRERERASQzkFERERERBTpHEREREREBJDOQUREREREFOkcREREREQEkM5BRERE\nREQU6RxERERERASQl6BFdNnMp+cybMzNPR1Gj5uTF8FFRET0G/1y5EDSQknTaj7DJLVIOqeJY4+T\n9LCkyyTtL2lMB3lHSTq3e6NvWM94Se95aYWk/SRNlTRd0mxJXy7p4yQdvIh1vFr+DpM0qyb9ckkz\nJJ0g6ZuS9uygjKbqrfl9Zkm6StLKixJrXVld/g3Kset0te6IiIiI/qa/jhzMtz2yLm0O0MzrbP8J\n2NP2n8v3G7ozsO4iaQVgLLCt7T9LWgkY1s11/D2wje0Nu7Ncan4fSZcBxwA/qKlXVG/vfqub6603\nCpgFPLOE64mIiIjoE/rlyEEjknaVdFPZPl3SReWO/BOSjivpPwHWB35T7pS/fVda0iHlTvd0SXfX\n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\nqEYOni7po2oOmQOMlLRcubveVub9wM7lAhpJ7yvptwHH1qwR+Ej5uz7whO1zqO6yjyjpd0paty7M\ntgvw5yUNBg6ub0cDd1ONhCBp87bya9meB1wInNs2nUrVouz2FomvRtVZmCtpbWCfmn2/pzrXR1M3\npai4EzhY0vtLPe+T9MGyHmE5278GTi1lRERERCxTlsmnFQGDgR+rerTlAqo716PLU3KOpJrGszzV\n1KCflGPOAC6U9C2qu8u1ZlBNJ1oT+JbtZyQdAZws6U3gVaBt5GAE8EyDmL4I/KekeSWmw20vlPQf\nwCWSTqW6Q95mAvAkMBt4GJgCYPs5SaOBayQtB/wV+DjVCMQPgRkl/Umq9QKHAl8scf4F+E7ZvyHw\nQk192H5J0gVUi4L/Us5PZ84HLpb0cIlzcjv5TikxzpL0CtVIxiXlXK1TF8d0SVOp1mP8qZyLtn0L\nyyLkUcAR9ZXYnl3O5e2lnW8CXy31XVzSAL7RWcO2WHcIrXk/QURERPQjsutnxMSiKGsKXrX9vSby\nrgZcaPuQzvL2pHKH/yjbJ/Z0LL1ZS0uLW1tbezqMiIiIiE5Jmlwe5tKhZXXkoEfYfpl3nh7Ua9me\nBaRjEBEREbGMSedgMbU9iz8iIiIioq9bJhckR0RERETEe6VzEBERERERQDoHERERERFRpHMQERER\nERFAOgcREREREVHkaUURXTTz6bkMG3Nzp/nm5EVpERER0Udk5GApk7RQ0rSaz7BFPP5nkjYt2/+6\nJGLsoO5xkg5uJ/3JmjYdt4jl7i9pTNk+sK19DfKdLumkTspqkXTOotQfEREREZWMHCx9822PbG+n\npOVtL2hvv+3/U/P1X4HvdGdwi+Fk21e3t1PSANsLG+2zfQNwQ/l6IHATMLsrQdhuBfLa4oiIiIgu\nyMhBLyBplKQbJP0OuFPSrpJuqtl/rqRRZXt8uTt+JjCo3Km/TNIqkm6WNF3SLEmHNajnaEmTSp5f\nS1q5pI+TdI6k+yQ90TY6oMq5kh6V9Fvg/YvYrlclfV/SdGB7SXMkrVn2tUgaX9P+cyV9DNgfOLu0\na4MOyh4vqaVsrylpTtl++9xJGizpYkkzJc2Q9JmSvpekiZKmSLpK0uCSfqak2SXv9xalrRERERH9\nQToHS1/bBf00SdfWpG8FHGx7l2YKsT2GMgph+3DgE8Aztre0vTlwa4PDrrG9je0tgYeBL9XsGwrs\nCOwHnFnSDgI2AjYF/hH4WAchnV3Tri1K2irAAyWme5to031UIwgnl3b9obNjOvFvwFzbW9geAfyu\ndE5OBfa0vRXVKMOJktagau9mJe+3GxUoabSkVkmtC+fNXczwIiIiInqXTCta+tqbVnSH7RcWo9yZ\nwPclnQXcZPueBnk2l/RtYHVgMHBbzb7rbL8FzJa0dknbGbi8TAd6poxstKfRtKKFwK+70phusifw\n2bYvtl+UtB9VZ2eCJIAVgYnAXOB14MIy8nDTe4sD22OBsQArDR3uJRp9RERExFKWkYPe47Wa7QW8\n+7cZ2NnBth+jGn2YCXxb0mkNso0DvmZ7C+CMunLfqNlWkzF35vW6dQa17eq0TZ3oalmi6oiNLJ9N\nbX+prPPYFriaavSk0chLRERERL+WzkHv9BSwqaSVJK0O7NFOvjclrQAgaR1gnu1fAGdTdRTqrQo8\nW445vIk47gYOkzRA0lBgt0VtSJ05wNZl+zPt5HmlxLkoZb3nCUrFHcBX275I+jvgfmAHSRuWtFUk\nfbisOxhi+xbgBGDLJmKIiIiI6FfSOeiFbP8J+BUwq/yd2k7WscAMSZcBWwAPSpoG/DuN58z/G/AA\nMAF4pIlQrgUep3py0KVU028WxxnAjyS1Uk05auQK4GRJUxssSF6ed0Y4vgd8RdJUYM12yvo28Hdl\ngfZ0YDfbzwGjgMslzaBq08ZUHZKbStq9wIldamFEREREHyY706ajbygLuC8od/d7XEtLi1tb89TU\niIiI6P0kTbbd0lm+jBxEnyBpJvAWcHtPxxIRERHRX+VpRdEnlEXUEREREbEEZeQgIiIiIiKAdA4i\nIiIiIqJI5yAiIiIiIoB0DiIiIiIiokjnICIiIiIigDytKKLLZj49l2Fjbn77+5wz9+3BaCIiIiIW\nX0YOoltJWihpmqTpkqZI+lhPxxQRERERzcnIQXS3+bZHAkjaG/gusMuSqEiSqN7y/daSKD8iIiJi\nWZORg1iSVgNebPsi6WRJkyTNkHRGSTtT0ldr8pwu6aQO8g+T9KikS4FZwHqSzpfUKumhtnwl7ycl\nPSJpsqRzJN1U0leRdJGkByVNlXRASd+spE0rdQ5fCucoIiIiotfIyEF0t0GSpgEDgaHA7gCS9gKG\nA9sCAm6QtDNwJfBD4L/K8YcCe3eQ/48l/Qjb95eyT7H9gqQBwP9v795j5CrLOI5/f1YQwqUauVgo\nWMDiBaxVVxIvoNFIQAgaJXgJxAS0Gi9BDDEYTAySKP6jQrzEBowhIngBghEVQUgQUoEtvUCBCkIV\nEG1QRIrEy/L4x3lLJnW7213bninz/SQnc+Y975zzzLwz2fOc933P/irJIuC3wLeBo6rqgSSXDsR4\nNnB9VZ2a5PnArUmuAz4KnF9VlyTZGZizTT4hSZKkIWVyoK1tcFjR64GLkxwOHN2WFa3e7sDCqroo\nyT5J9gP2Bh6rqgeTnD5Zfbrk4PcbE4PmpCRL6L7P84BX0PWK3V9VD7Q6lwJL2vrRwAkbeyjoEpkD\ngWXA2UnmA1dU1b2bvrl2nCUAc/bce3afkCRJ0pAyOdA2U1XLkuxFd9If4EtV9e1Jqv4IOBF4EV1P\nApurn2QB8OTA84OAM4HXVdVjSb5Ld7I/lQDvqaq1m5TfneQW4DjgZ0k+UlXXb/KelgJLAZ43b2FN\ncxxJkqQdinMOtM0keRnd0Jy/ANcApybZvW3bP8k+reoPgPfRJQg/amVT1R+0J12y8HiSfYFjW/la\n4OCWTAC8d+A11wCfbBOaSfLq9ngwXW/DBcBVwKLZv3tJkqQdjz0H2to2zjmA7gr9B6tqAvhlkpcD\ny9o5+QbgZGB9Va1JsgfwcFU9AlBVm6s/MXiwqlqVZAVwD/AgcHMrfyrJx4BfJHkSuG3gZefSzXNY\nneQ5wAPA8XTzHU5J8m/gT8AXt+YHI0mSNOxS5cgIPTsl2b2qNrQegm8A91bVV7fW/sfGxmp8fHxr\n7U6SJGmbSbK8qsamq+ewIj2bfbj1YqwB5tLdvUiSJEmb4bAiPWu1XoKt1lMgSZL0bGfPgSRJkiTA\n5ECSJElSY3IgSZIkCTA5kCRJktSYHEiSJEkCTA4kSZIkNSYH0izd8fDjLDjr6r7DkCRJ2mpMDjSl\nJBNJVg4sC6aouyDJB7ZfdJBkXZK9Jimfm+TiJPcl+V1bn9u27Zfkx239LUl+uj1jliRJGlYmB5rO\nU1W1eGBZN0XdBcB2TQ6mcBFwf1W9pKoOAR4ALgSoqj9W1Ym9RidJkjSETA40Y62H4NdJbm/LG9qm\n84AjWw/DGUkOS3Jre746ycJJ9vWtJONJ1iQ5Z6B8XZJz2v7vSPKyVv7CJL9s9S8EMsk+XwK8Fjh3\noPgLwFiSQ1r8d07yujcP9JCsSLLH//VBSZIk7WBMDjSdXQdOmK9sZeuBt1fVa4D3Ahe08rOAX7ce\nhq8CHwXOr6rFwBjw0CT7P7uqxoBFwJuTLBrY9mg7xreAM1vZ54Gbquow4ErgwEn2+QpgZVVNbCxo\n6yuBw6Z4r2cCH2/xHgk8tWmFJEtaMjM+8Y/Hp9iVJEnSjue5fQegofdUO1ketBPw9SSLgQng0M28\ndhlwdpL5wBVVde8kdU5KsoTuuziP7sR+ddt2RXtcDry7rR+1cb2qrk7y2Cze0+bcDHwlySUt3v9J\nZqpqKbAU4HnzFtZWPLYkSVLv7DnQbJwB/Bl4FV2PwM6TVaqq7wMn0F2B/1mStw5uT3IQ3dX6t1XV\nIuBqYJeBKv9sjxPMLJG9C1ic5Jnvd1tf3LZNqqrOAz4E7ArcvHEokyRJ0qgwOdBszAUeqaqngVOA\nOa38CeCZcfpJDqabFHwBcBXd0KFBewJPAo8n2Rc4dguOfSNt0nOSY4EXbFqhqu4DVgCfGyj+HHB7\n2zapJIdU1R1V9WXgNsDkQJIkjRSTA83GN4EPJllFdwL9ZCtfDUwkWZXkDOAk4M4kK4HDgYsHd1JV\nq+hO4u8Bvk83rGc65wBHJVlDN7zoD5updxpwaLuN6e/ohj6dNs2+P5XkziSrgX8DP5+q8iv3n8u6\n847bgpAlSZJ2DKly2LQ0G2NjYzU+Pt53GJIkSdNKsrzdBGZK9hxIkiRJAkwOJEmSJDUmB5IkSZIA\n5xxIs5bkCWBt33GIvYBH+w5CgG0xLGyH4WFbDA/bAl5cVXtPV8l/gibN3totmdijbSvJuO0wHGyL\n4WA7DA/bYnjYFlvOYUWSJEmSAJMDSZIkSY3JgTR7S/sOQIDtMExsi+FgOwwP22J42BZbyAnJkiRJ\nkgB7DiRJkiQ1JgeSJEmSAJMDacaSHJNkbZL7kpzVdzyjKsl3kqxPcmffsYyyJAckuSHJXUnWJDm9\n75hGVZJdktyaZFVri3P6jmmUJZmTZEWSn/YdyyhLsi7JHUlWJhnvO54dgXMOpBlIMgf4LfB24CHg\nNuD9VXVXr4GNoCRHARuAi6vq8L7jGVVJ5gHzqur2JHsAy4F3+ZvY/pIE2K2qNiTZCbgJOL2qftNz\naCMpyaeBMWDPqjq+73hGVZJ1wFhVjfo/QNti9hxIM3MEcF9V3V9V/wIuA97Zc0wjqapuBP7adxyj\nrqoeqarb2/oTwN3A/v1GNZqqs6E93aktXgHsQZL5wHHAhX3HIs2UyYE0M/sDDw48fwhPhCQAkiwA\nXg3c0m8ko6sNZVkJrAeurSrboh9fAz4DPN13IKKA65IsT7Kk72B2BCYHkqT/W5LdgcuBT1XV3/uO\nZ1RV1URVLQbmA0ckccjddpbkeGB9VS3vOxYB8Kb2mzgW+HgbkqopmBxIM/MwcMDA8/mtTBpZbXz7\n5cAlVXVF3/EIqupvwA3AMX3HMoLeCJzQxrpfBrw1yff6DWl0VdXD7XE9cCXd8GBNweRAmpnbgIVJ\nDkqyM/A+4Cc9xyT1pk2CvQi4u6q+0nc8oyzJ3kme39Z3pbtxwj39RjV6quqzVTW/qhbQ/Y24vqpO\n7jmskZRkt3ajBJLsBhwNeIe7aZgcSDNQVf8BPgFcQzfx8odVtabfqEZTkkuBZcBLkzyU5LS+YxpR\nbwROobs6urIt7+g7qBE1D7ghyWq6CxnXVpW30dQo2xe4Kckq4Fbg6qr6Rc8xDT1vZSpJkiQJsOdA\nkiRJUmNyIEmSJAkwOZAkSZLUmBxIkiRJAkwOJEmSJDUmB5IkSZIAkwNJkiRJzX8BfaIM7yc490AA\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x109c8a710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "result['Zinc, Zn'].sort_values().plot(kind='barh', figsize=(10, 8))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们还可以找到每一种营养成分含量最多的食物是什么："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "by_nutrient = ndata.groupby(['nutgroup', 'nutrient'])\n",
    "\n",
    "get_maximum = lambda x: x.loc[x.value.idxmax()]\n",
    "get_minimum = lambda x: x.loc[x.value.idxmin()]\n",
    "\n",
    "max_foods = by_nutrient.apply(get_maximum)[['value', 'food']]\n",
    "\n",
    "# make the food a little smaller\n",
    "max_foods.food = max_foods.food.str[:50]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因为得到的DataFrame太大，这里只输出'Amino Acids'(氨基酸)的营养群（nutrient group）:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "nutrient\n",
       "Alanine                          Gelatins, dry powder, unsweetened\n",
       "Arginine                              Seeds, sesame flour, low-fat\n",
       "Aspartic acid                                  Soy protein isolate\n",
       "Cystine               Seeds, cottonseed flour, low fat (glandless)\n",
       "Glutamic acid                                  Soy protein isolate\n",
       "                                       ...                        \n",
       "Serine           Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Threonine        Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Tryptophan        Sea lion, Steller, meat with fat (Alaska Native)\n",
       "Tyrosine         Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Valine           Soy protein isolate, PROTEIN TECHNOLOGIES INTE...\n",
       "Name: food, Length: 19, dtype: object"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_foods.loc['Amino Acids']['food']"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [py35]",
   "language": "python",
   "name": "Python [py35]"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
